home *** CD-ROM | disk | FTP | other *** search
- /*
- ##########################################################################
- #### ####
- #### The MusicBox Project ####
- #### ============================ ####
- #### ####
- #### MusicBoxLibrary.c ####
- #### ####
- #### Version 2.1os -- September 29, 2000 ####
- #### ####
- #### Copyright (C) 1994 Thomas Dreibholz ####
- #### 2000 Molbachweg 7 ####
- #### 51674 Wiehl ####
- #### Germany ####
- #### ####
- #### EMail: Dreibholz@bigfoot.com ####
- #### WWW: http://www.bigfoot.com/~dreibholz ####
- #### ####
- ##########################################################################
- */
- /***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-
- /* MusicBox-Library Funktionen */
-
- #define MBL_VERSION 210
-
- #include "MusicBoxLibrary.h"
- #include "MusicBox.h"
- #include <exec/execbase.h>
-
- UBYTE *MusicBoxHost=MUSICBOX_HOSTNAME;
- UBYTE *ArchiveHost=ARCHIVE_HOSTNAME;
-
- UBYTE *GetLStr();
- int OffsetX();
- int OffsetY();
- void PutMText();
- void ErrorL();
-
- extern struct Catalog *Catalog;
- extern struct ExecBase *SysBase;
- extern struct Library *VersionBase;
- extern ULONG SleepPointerSize;
- extern UBYTE *SleepPointerData;
- UBYTE *ChipData;
-
- struct TextAttr Times15 =
- {
- "times.font", 15,
- FS_NORMAL,FPF_DISKFONT
- };
-
- struct TextAttr Topaz9 =
- {
- "topaz.font", 9,
- FS_NORMAL,FPF_ROMFONT
- };
-
- struct TextAttr Helvetica13 =
- {
- "helvetica.font", 13,
- FS_NORMAL,FPF_DISKFONT
- };
-
- struct MusicBoxCommand *AddUser(name)
- UBYTE *name;
- {
- register struct MusicBoxUser *mbc;
-
- mbc=AllocMem(sizeof(struct MusicBoxCommand),MEMF_CLEAR|MEMF_PUBLIC);
- if(mbc!=NULL)
- {
- mbc->HostName=name;
- mbc->ReplyPort=CreatePort(0L,0L);
- if(mbc->ReplyPort==NULL)
- {
- FreeMem(mbc,sizeof(struct MusicBoxCommand));
- return(NULL);
- }
- mbc->SignalMask=(1L<<mbc->ReplyPort->mp_SigBit);
- mbc->Message.mn_Length=sizeof(struct MusicBoxCommand);
- }
- return(mbc);
- }
-
- void RemUser(mbc)
- struct MusicBoxCommand *mbc;
- {
- DeletePort(mbc->ReplyPort);
- FreeMem(mbc,sizeof(struct MusicBoxCommand));
- }
-
- BOOL PutCommand(mbc)
- struct MusicBoxCommand *mbc;
- {
- REGISTER BOOL result;
- register struct MsgPort *port;
-
- Forbid();
- port=FindPort(mbc->HostName);
- if(port!=NULL)
- {
- mbc->Message.mn_Node.ln_Succ=NULL;
- mbc->Message.mn_Node.ln_Pred=NULL;
- mbc->Message.mn_Node.ln_Type=NT_MESSAGE;
- mbc->Message.mn_ReplyPort=mbc->ReplyPort;
- PutMsg(port,mbc);
- result=TRUE;
- }
- else
- result=FALSE;
- Permit();
- return(result);
- }
-
- struct MusicBoxCommand *CheckResult(mbc)
- struct MusicBoxCommand *mbc;
- {
- return(GetMsg(mbc->ReplyPort));
- }
-
- int WaitResult(mbc)
- struct MusicBoxCommand *mbc;
- {
- WaitPort(mbc->ReplyPort);
- GetMsg(mbc->ReplyPort);
- return(mbc->Status);
- }
-
- int MusicBoxCommand(mbc,cmd)
- struct MusicBoxCommand *mbc;
- LONG cmd;
- {
- mbc->Command=cmd;
- if((PutCommand(mbc))==TRUE)
- return(WaitResult(mbc));
- return(MBCS_NO_PORT);
- }
-
- int MusicBoxCommand1(mbc,cmd,a1)
- struct MusicBoxCommand *mbc;
- LONG cmd,a1;
- {
- mbc->Command=cmd;
- mbc->Args[0]=a1;
- if((PutCommand(mbc))==TRUE)
- return(WaitResult(mbc));
- return(MBCS_NO_PORT);
- }
-
- int MusicBoxCommand2(mbc,cmd,a1,a2)
- struct MusicBoxCommand *mbc;
- LONG cmd,a1,a2;
- {
- mbc->Command=cmd;
- mbc->Args[0]=a1;
- mbc->Args[1]=a2;
- if((PutCommand(mbc))==TRUE)
- return(WaitResult(mbc));
- return(MBCS_NO_PORT);
- }
-
- void Out(win,x,y,text)
- struct Window *win;
- int x,y;
- UBYTE *text;
- {
- PutMText(win,x,y,text,435-x);
- }
-
- void OutR(win,x,y,text)
- struct Window *win;
- int x,y;
- UBYTE *text;
- {
- REGISTER UWORD l;
-
- l=strlen(text);
- Move(win->RPort,x+OffsetX(win)-TextLength(win->RPort,text,l),y+OffsetY(win));
- Text(win->RPort,text,l);
- }
-
- void OutC(win,x,y,w,text)
- struct Window *win;
- int x,y,w;
- UBYTE *text;
- {
- REGISTER UWORD l;
-
- l=strlen(text);
- Move(win->RPort,x+OffsetX(win)+((w-TextLength(win->RPort,text,l))/2),y+OffsetY(win));
- Text(win->RPort,text,l);
- }
-
- void InformationA(info)
- struct InfoStruct *info;
- {
- UBYTE t1[30];
- UBYTE pro[10],copro[10],cache[20];
- APTR VisualInfo;
- REGISTER ULONG chip,fast,total,vmem;
- register struct IntuiMessage *msg;
- register struct Window *win;
- register struct RastPort *rp;
- register struct TextFont *Font;
- register struct Image *image;
- struct TagItem tag[9];
- struct Screen *scr;
- int i,ox,oy;
-
- if(info->LowRes==TRUE)
- {
- Font=OpenDiskFont(&Helvetica13);
- if(Font==NULL)
- {
- ErrorL(83,"Unable to open font: helvetica.font 13");
- return;
- }
- }
- else
- {
- Font=OpenDiskFont(&Times15);
- if(Font==NULL)
- {
- ErrorL(25,"Unable to open font: times.font 15");
- return;
- }
- }
- if(SysBase->AttnFlags & AFF_68030) strcpy(&pro,"68030");
- else if(SysBase->AttnFlags & AFF_68020) strcpy(&pro,"68020");
- else if(SysBase->AttnFlags & AFF_68010) strcpy(&pro,"68010");
- else strcpy(&pro,"68000");
- if(SysBase->AttnFlags & AFF_68882) strcpy(&copro,"68882");
- else if(SysBase->AttnFlags & AFF_68881) strcpy(&copro,"68881");
- else strcpy(&copro,GetLStr(64,"N/A"));
- tag[0].ti_Tag=WA_Left;
- tag[0].ti_Data=90;
- tag[1].ti_Tag=WA_Top;
- tag[1].ti_Data=60;
- tag[2].ti_Tag=WA_InnerWidth;
- tag[2].ti_Data=455;
- tag[3].ti_Tag=WA_InnerHeight;
- tag[3].ti_Data=140;
- tag[4].ti_Tag=WA_IDCMP;
- tag[4].ti_Data=CLOSEWINDOW;
- tag[5].ti_Tag= WA_Flags;
- tag[5].ti_Data=WINDOWCLOSE|WINDOWDEPTH|WINDOWDRAG|ACTIVATE;
- tag[6].ti_Tag=WA_Title;
- tag[6].ti_Data=info->Title;
- tag[7].ti_Tag=TAG_DONE;
- win=OpenWindowTagList(NULL,&tag);
- if(win!=NULL)
- {
- rp=win->RPort;
- ox=OffsetX(win);
- oy=OffsetY(win);
- if(Font) SetFont(rp,Font);
- SetAPen(rp,2);
- OutC(win,95,0,170,info->ProgName);
- OutC(win,95,15,170,"Copyright (C) 1994-2000 by");
- OutC(win,95,30,170,"Thomas Dreibholz");
- OutC(win,95,45,170,"All rights reserved");
-
- if(info->Icon!=NULL)
- {
- scr=LockPubScreen(NULL);
- if(scr!=NULL)
- {
- VisualInfo=GetVisualInfoA(scr,NULL);
- if(VisualInfo!=NULL)
- {
- tag[0].ti_Tag = GT_VisualInfo;
- tag[0].ti_Data = VisualInfo;
- tag[1].ti_Tag = TAG_DONE;
- image=info->Icon->do_Gadget.GadgetRender;
- DrawBevelBoxA(rp,9+ox,oy-1,image->Width+2,image->Height+2,&tag);
- DrawImage(rp,image,10+ox,oy);
- image=info->Icon->do_Gadget.SelectRender;
- if(image!=NULL)
- {
- tag[1].ti_Tag = GTBB_Recessed;
- tag[1].ti_Data = TRUE;
- tag[2].ti_Tag = TAG_DONE;
- DrawBevelBoxA(rp,9+ox,79+oy,image->Width+2,image->Height+2,&tag);
- DrawImage(rp,image,10+ox,80+oy);
- }
- FreeVisualInfo(VisualInfo);
- }
- UnlockPubScreen(NULL,scr);
- }
- }
-
- for(i=0;i<10;i++)
- {
- if(info->Text[i].LeftEdge==0)
- i=10;
- else
- {
- if(info->Text[i].Flags==ISTF_LEFT)
- Out(win,info->Text[i].LeftEdge,info->Text[i].TopEdge,info->Text[i].Text);
- else if(info->Text[i].Flags==ISTF_RIGHT)
- OutR(win,info->Text[i].LeftEdge,info->Text[i].TopEdge,info->Text[i].Text);
- }
- }
-
- if(info->RegInfo == NULL)
- OutC(win,0,65,455,"This program is Open Source - Read COPYING!");
- else
- OutC(win,0,65,455,info->RegInfo);
-
- i=0;
- do
- {
- if(i<40)
- {
- if(i==0)
- {
- SetAPen(rp,0);
- RectFill(rp,ox+300,oy-10,ox+435,oy+50);
- SetAPen(rp,2);
- }
- Out(win,300,0,GetLStr(21,"Chip:"));
- Out(win,300,15,GetLStr(22,"Fast:"));
- Out(win,300,30,GetLStr(23,"VMem:"));
- Out(win,300,45,GetLStr(24,"Total:"));
- chip=AvailMem(MEMF_CHIP);
- fast=AvailMem(MEMF_FAST|MEMF_PUBLIC);
- total=AvailMem(MEMF_ANY);
- vmem=total-AvailMem(MEMF_PUBLIC);
- sprintf(&t1,"%6ld KB",chip/1024L);
- OutR(win,430,0,&t1);
- sprintf(&t1,"%6ld KB",fast/1024L);
- OutR(win,430,15,&t1);
- sprintf(&t1,"%6ld KB",vmem/1024L);
- OutR(win,430,30,&t1);
- sprintf(&t1,"%6ld KB",total/1024L);
- OutR(win,430,45,&t1);
- }
- else if(i<52)
- {
- if(i==40)
- {
- SetAPen(rp,0);
- RectFill(rp,ox+300,oy-10,ox+435,oy+50);
- SetAPen(rp,2);
- Out(win,300,0,GetLStr(65,"Processor:"));
- Out(win,300,15,GetLStr(66,"Coprocessor:"));
- Out(win,300,30,GetLStr(67,"Inst. cache:"));
- Out(win,300,45,GetLStr(68,"Data cache:"));
- OutR(win,430,0,&pro);
- OutR(win,430,15,&copro);
- chip=CacheControl(0,0);
- strcpy(&t1,GetLStr(69,"Off"));
- if(chip & CACRF_EnableD)
- {
- strcpy(&t1,GetLStr(70,"On"));
- if(chip & CACRF_DBE) strcpy(&t1,GetLStr(71,"Burst"));
- }
- OutR(win,430,30,&t1);
- chip=CacheControl(0,0);
- strcpy(&t1,GetLStr(69,"Off"));
- if(chip & CACRF_EnableI)
- {
- strcpy(&t1,GetLStr(70,"On"));
- if(chip & CACRF_IBE) strcpy(&t1,GetLStr(71,"Burst"));
- }
- OutR(win,430,45,&t1);
- }
- }
- if(i<62)
- {
- if(i==52)
- {
- SetAPen(rp,0);
- RectFill(rp,ox+300,oy-10,ox+435,oy+50);
- SetAPen(rp,2);
- Out(win,300,15,GetLStr(72,"Kickstart:"));
- Out(win,300,30,GetLStr(73,"Workbench:"));
- sprintf(&t1,"%ld.%ld",SysBase->LibNode.lib_Version,
- SysBase->LibNode.lib_Revision);
- OutR(win,430,15,&t1);
- if(VersionBase==NULL)
- strcpy(&t1,"??.??");
- else
- sprintf(&t1,"%ld.%ld",VersionBase->lib_Version,
- VersionBase->lib_Revision);
- OutR(win,430,30,&t1);
- }
- }
- else
- i=-1;
-
- Delay(12); i++;
- msg=GetMsg(win->UserPort);
- } while(msg==NULL);
- ReplyMsg(msg);
- CloseWindow(win);
- }
- CloseFont(Font);
- }
-
- LONG MultiRequestA(titel,text,gads)
- UBYTE *titel,*text,*gads;
- {
- struct EasyStruct easy;
-
- easy.es_StructSize=sizeof(struct EasyStruct);
- easy.es_Flags=0;
- easy.es_Title=titel;
- easy.es_TextFormat=text;
- easy.es_GadgetFormat=gads;
- return(EasyRequestArgs(NULL,&easy,0L,0L));
- }
-
- void ErrorL(num,text)
- int num;
- UBYTE *text;
- {
- MultiRequestA(GetLStr(15,"Music Box - Error!"),GetLStr(num,text),GetLStr(16,"Abort"));
- }
-
- int EasyCommand(host,cmd,a1,a2)
- UBYTE *host;
- long cmd,a1,a2;
- {
- struct MusicBoxCommand *mbc;
- int result;
-
- mbc=AddUser(host);
- if(mbc!=NULL)
- {
- result=MusicBoxCommand2(mbc,cmd,a1,a2);
- RemUser(mbc);
- }
- else
- return(MBCS_NO_MEMORY);
- return(result);
- }
-
- int IconifyMusicBox() { return(EasyCommand(MUSICBOX_HOSTNAME,MBC_ICONIFY,0,0)); }
- int UnIconifyMusicBox() { return(EasyCommand(MUSICBOX_HOSTNAME,MBC_UNICONIFY,0,0)); }
- int IconifyArchive() { return(EasyCommand(ARCHIVE_HOSTNAME,MBC_ICONIFY,0,0)); }
- int UnIconifyArchive() { return(EasyCommand(ARCHIVE_HOSTNAME,MBC_UNICONIFY,0,0)); }
-
- void OpenArchive(id,title,flags)
- ULONG id;
- int title;
- UBYTE flags;
- {
- UBYTE text[100];
- struct TagItem tag[5];
- register struct FileHandle *con;
- register int test;
-
- if(!(flags & OA_QUIET))
- {
- test=EasyCommand(ARCHIVE_HOSTNAME,7000,id,title);
- if(test==0) return;
- }
- else
- {
- test=EasyCommand(ARCHIVE_HOSTNAME,MBC_VERSION,0,0);
- if(test==MBCS_OK) return;
- }
- con=Open("CON:10/20/620/150/Music Box/AUTO/WAIT/CLOSE",MODE_NEWFILE);
- if(con!=NULL)
- {
- tag[0].ti_Tag=SYS_Input;
- tag[0].ti_Data=NULL;
- tag[1].ti_Tag=SYS_Output;
- tag[1].ti_Data=con;
- tag[2].ti_Tag=SYS_Asynch;
- tag[2].ti_Data=TRUE;
- tag[3].ti_Tag=SYS_UserShell;
- tag[3].ti_Data=TRUE;
- tag[4].ti_Tag=TAG_DONE;
- sprintf(&text,"MusicBox:Archive DISCID %lx TITLE %ld",
- id,title);
- if(flags & OA_QUIET)
- strcat(&text," QUIET");
- if(flags & OA_LOWRES)
- strcat(&text," LOWRES");
- SystemTagList(&text,&tag);
- }
- else
- ErrorL(20,"Unable to open AutoCon-window!");
- }
-
- UBYTE *GetLStr(num,def)
- LONG num;
- UBYTE *def;
- {
- if(Catalog==NULL) return(def);
- return(GetCatalogStr(Catalog,num,def));
- }
-
- struct NewGadget n1={10,5,580,170,0L,0L,0,0,0,0L};
- struct NewGadget n2={10,178,580,18,0L,0L,10,PLACETEXT_IN,0,0L};
-
- UBYTE *d1="%02d %02d:%02d'%02d: %2d:%02d'%02d %3ld.%ld MB %s";
- UBYTE *d2="%02d %02d:%02d'%02d: %2d:%02d'%02d %3ld.%ld MB %s";
-
- void DisplayCatalog(cat,lowres)
- struct Katalog *cat;
- BOOL lowres;
- {
- REGISTER BOOL ende;
- UBYTE *tex;
- struct TagItem tag[10];
- struct List Liste;
- register struct XNode
- { struct Node Node;
- UBYTE String[100]; } *node,*n[5];
- struct Remember *Remember;
- struct Screen *scr;
- struct Gadget *GadgetList,*g1,*g2;
- struct TextFont *Font;
- struct TextAttr *attr;
- register int i;
- register long j;
- register struct Gadget *gad;
- register struct Window *win;
- register struct RastPort *rp;
- register struct IntuiMessage *msg;
- register struct VisualInfo *vi;
-
- NewList(&Liste);
- j=0;
- if(lowres==FALSE) tex=d1; else tex=d2;
- for(i=0;i<cat->Anzahl;i++)
- {
- node=AllocRemember(&Remember,sizeof(struct XNode),MEMF_CLEAR|MEMF_ANY);
- if(node==NULL)
- {
- FreeRemember(&Remember,TRUE);
- ErrorL(6,"Not enough memory!");
- return;
- }
- node->Node.ln_Name=&node->String;
- sprintf(&node->String,
- tex,
- i+1,
- cat->KE[i].SAdresse/75/60,(cat->KE[i].SAdresse/75) % 60,cat->KE[i].SAdresse % 75,
- cat->KE[i].TAdresse/75/60,(cat->KE[i].TAdresse/75) % 60,cat->KE[i].TAdresse % 75,
- cat->KE[i].TAdresse/512,(cat->KE[i].TAdresse % 512)/52,
- &cat->KE[i].Titel);
- j+=cat->KE[i].TAdresse;
- AddTail(&Liste,node);
- }
- for(i=0;i<5;i++)
- {
- n[i]=AllocRemember(&Remember,sizeof(struct XNode),MEMF_CLEAR|MEMF_ANY);
- if(n[i]==NULL)
- {
- FreeRemember(&Remember,TRUE);
- ErrorL(6,"Not enough memory!");
- return;
- }
- n[i]->Node.ln_Name=&n[i]->String;
- if(i==4) AddHead(&Liste,n[i]); else AddTail(&Liste,n[i]);
- }
- for(i=0;i<78;i++)
- n[0]->String[i]='-';
- n[0]->String[79]=0x00;
- n[1]->String[0]=0x00;
- sprintf(&n[2]->String,GetLStr(500,"Total playing time: %2d:%02d'%02d"),
- j/75/60,(j/75) % 60,j % 75);
- sprintf(&n[3]->String,GetLStr(501,"ID-Number: $%08lx"),cat->DiscID);
- sprintf(&n[4]->String,"%s:",cat->CDName);
- scr=LockPubScreen(NULL);
- if(scr!=NULL)
- {
- vi=GetVisualInfoA(scr,NULL);
- if(vi!=NULL)
- {
- if(lowres==FALSE) attr=&Times15; else attr=&Topaz9;
- Font=OpenDiskFont(attr);
- n1.ng_VisualInfo=vi;
- n1.ng_TextAttr=attr;
- n2.ng_VisualInfo=vi;
- n2.ng_TextAttr=attr;
- n2.ng_GadgetText=GetLStr(57,"_Okay");
- gad=CreateContext(&GadgetList);
- if(gad!=NULL)
- {
- Remember=NULL;
- tag[0].ti_Tag=GTLV_ReadOnly;
- tag[0].ti_Data=TRUE;
- tag[1].ti_Tag=GTLV_Labels;
- tag[1].ti_Data=&Liste;
- tag[2].ti_Tag=TAG_DONE;
- g1=CreateGadgetA(LISTVIEW_KIND,gad,&n1,&tag);
- if(g1!=NULL)
- {
- tag[0].ti_Tag=GT_Underscore;
- tag[0].ti_Data='_';
- tag[1].ti_Tag=TAG_DONE;
- g2=CreateGadgetA(BUTTON_KIND,g1,&n2,&tag);
- }
- }
- if(g2!=NULL)
- {
- tag[0].ti_Tag=WA_Left;
- tag[0].ti_Data=20;
- tag[1].ti_Tag=WA_Top;
- tag[1].ti_Data=15;
- tag[2].ti_Tag=WA_InnerWidth;
- tag[2].ti_Data=600;
- tag[3].ti_Tag=WA_InnerHeight;
- tag[3].ti_Data=203;
- tag[4].ti_Tag=WA_IDCMP;
- tag[4].ti_Data=CLOSEWINDOW|LISTVIEWIDCMP|IDCMP_GADGETUP|VANILLAKEY;
- tag[5].ti_Tag=WA_Flags;
- tag[5].ti_Data=ACTIVATE|WINDOWCLOSE|WINDOWDEPTH|WINDOWDRAG|WFLG_GIMMEZEROZERO;
- tag[6].ti_Tag=WA_Gadgets;
- tag[6].ti_Data=GadgetList;
- tag[7].ti_Tag=WA_Title;
- tag[7].ti_Data=GetLStr(63,"Music Box - About CD");
- tag[8].ti_Tag=WA_PubScreen;
- tag[8].ti_Data=scr;
- tag[9].ti_Tag=TAG_DONE;
- win=OpenWindowTagList(NULL,&tag);
- if(win!=NULL)
- {
- rp=win->RPort;
- GTRefreshWindow(win,NULL);
- ende=FALSE;
- while(ende==FALSE)
- {
- WaitPort(win->UserPort);
- msg=GTGetIMsg(win->UserPort);
- while(msg!=NULL)
- {
- switch(msg->Class)
- {
- case CLOSEWINDOW:
- ende=TRUE;
- break;
- case GADGETUP:
- gad=msg->IAddress;
- if(gad->GadgetID==10) ende=TRUE;
- break;
- case VANILLAKEY:
- switch(toupper((UBYTE)msg->Code))
- {
- case 'O':
- case 'S':
- ende=TRUE;
- break;
- }
- break;
- }
- GTReplyIMsg(msg);
- msg=GTGetIMsg(win->UserPort);
- }
- }
- CloseWindow(win);
- }
- else
- ErrorL(33,"Unable to open window!");
- FreeGadgets(GadgetList);
- }
- else
- ErrorL(31,"Unable to create gadgets!");
- FreeVisualInfo(vi);
- if(Font) CloseFont(Font);
- }
- else
- ErrorL(30,"Unable to get VisualInfo!");
- UnlockPubScreen(NULL,scr);
- }
- else
- ErrorL(26,"Unable to lock public screen!");
- }
-
- struct Segment
- {
- ULONG Length;
- BPTR Next;
- UWORD OpCode;
- VOID (* Address)();
- };
-
- struct Task *CreateProcess(function,stack,name,pri)
- VOID (* function)();
- ULONG stack;
- UBYTE *name;
- BYTE pri;
- {
- register struct Process *proc;
- register struct Segment *Segment;
-
- Segment=AllocMem(sizeof(struct Segment),MEMF_CLEAR|MEMF_PUBLIC);
- if(Segment==NULL) return(NULL);
- Segment->Length=sizeof(struct Segment);
- Segment->Next=NULL;
- Segment->OpCode=0x4EF9;
- Segment->Address=function;
- Segment=(LONG)(&(Segment->Next)) >> 2;
-
- proc=CreateProc(name,pri,Segment,stack);
- if(proc==NULL) return(NULL);
-
- return((struct Task *)((ULONG)proc-(ULONG)sizeof(struct Task)));
- }
-
- void MacFormat(rp,tex,x)
- struct RastPort *rp;
- UBYTE *tex;
- int x;
- {
- REGISTER UWORD i,j,k,l;
-
- k=strlen(tex);
- l=TextLength(rp,tex,k);
- if(l>x)
- {
- i=0;
- j=TextLength(rp,"...",3);
- l=j;
- do
- {
- j+=TextLength(rp,&tex[i],1L);
- i++;
- } while(j<x);
- tex[i]=0x00;
- for(j=i-1;j>0;j--)
- {
- if(tex[j]==' ') tex[j]=0x00; else break;
- }
- if(tex[0]!=0x00) strcat(tex,"...");
- }
- }
-
- void PutText(win,x,y,text)
- struct Window *win;
- int x,y;
- UBYTE *text;
- {
- Move(win->RPort,x+OffsetX(win),y+OffsetY(win));
- Text(win->RPort,text,strlen(text));
- }
-
- void PutMText(win,x,y,text,l)
- struct Window *win;
- int x,y;
- UBYTE *text;
- int l;
- {
- UBYTE buffer[262];
-
- strcpy(&buffer,text);
- MacFormat(win->RPort,&buffer,l);
- Move(win->RPort,x+OffsetX(win),y+OffsetY(win));
- Text(win->RPort,&buffer,strlen(&buffer));
- }
-
- int OffsetX(win)
- struct Window *win;
- {
- return( win->BorderLeft+4);
- }
-
- int OffsetY(win)
- struct Window *win;
- {
- return(win->BorderTop+17);
- }
-
- void InitSleepPointer()
- {
- ChipData=AllocMem(SleepPointerSize,MEMF_CHIP|MEMF_PUBLIC);
- if(ChipData!=NULL)
- CopyMemQuick(&SleepPointerData,ChipData,SleepPointerSize);
- }
-
- void RemoveSleepPointer()
- {
- if(ChipData) FreeMem(ChipData,SleepPointerSize);
- }
-
- void SleepPointer(win)
- struct Window *win;
- {
- if(ChipData) SetPointer(win,ChipData,22,16,-7,-7);
- }
-
- void DeleteMMPort(port)
- struct MsgPort *port;
- {
- register struct MusicBoxCommand *mbc;
-
- Forbid();
- mbc=GetMsg(port);
- while(mbc!=NULL)
- {
- mbc->Status=MBCS_NO_PORT;
- ReplyMsg(mbc);
- mbc=GetMsg(port);
- }
- DeletePort(port);
- Permit();
- }
-
- void SetupPrinter()
- {
- struct TagItem tag[5];
- register struct FileHandle *con;
-
- con=Open("CON:10/20/620/150/Music Box/AUTO/WAIT/CLOSE",MODE_NEWFILE);
- if(con!=NULL)
- {
- tag[0].ti_Tag=SYS_Input;
- tag[0].ti_Data=NULL;
- tag[1].ti_Tag=SYS_Output;
- tag[1].ti_Data=con;
- tag[2].ti_Tag=SYS_Asynch;
- tag[2].ti_Data=TRUE;
- tag[3].ti_Tag=SYS_UserShell;
- tag[3].ti_Data=TRUE;
- tag[4].ti_Tag=TAG_DONE;
- SystemTagList("SYS:Prefs/Printer",&tag);
- }
- else
- ErrorL(20,"Unable to open AutoCon-window!");
- }
-
- void PrintIt(win,cat)
- struct Window *win;
- struct Katalog *cat;
- {
- UBYTE text[100];
- register long i,m,s,f;
- register struct FileHandle *fh;
-
- if(cat!=NULL)
- {
- i=MultiRequestA(GetLStr(502,"Print..."),
- GetLStr(503,"Do you want to print the current catalog?"),
- GetLStr(504,"Draft|Letter Quality|Abort"));
- SleepPointer(win);
- if(i!=0)
- {
- fh=Open("PRT:",MODE_NEWFILE);
- if(fh!=NULL)
- {
- if(i==1)
- strcpy(&text,"\x1b0\x1b#1\x1b[1\"z\x1bE\x1b[4m\x1b[1m");
- else
- strcpy(&text,"\x1b0\x1b#1\x1b[2\"z\x1bE\x1b[4m\x1b[1m");
- Write(fh,&text,strlen(&text));
- Write(fh,&cat->CDName,strlen(&cat->CDName));
- sprintf(&text,"\n\n\x1b[24m\x1b[22m");
- Write(fh,&text,strlen(&text));
-
- for(i=0;i<cat->Anzahl;i++)
- {
- m=cat->KE[i].TAdresse/75/60;
- s=(cat->KE[i].TAdresse/75) % 60;
- f=cat->KE[i].TAdresse % 75;
- sprintf(&text,"\x1b[1m%02d\x1b[22m %2ld:%02ld'%02ld %s\n",i+1,m,s,f,&cat->KE[i].Titel);
- Write(fh,&text,strlen(&text));
- }
-
- Close(fh);
- }
- else
- ErrorL(505,"Unable to open PRT:");
- }
- ClearPointer(win);
- }
- else
- {
- MultiRequestA(GetLStr(502,"Print..."),
- GetLStr(506,"Please select a CD before print!"),
- GetLStr(507,"Okay"));
- }
- }
-
- void CleanUpPort(port)
- struct MsgPort *port;
- {
- register struct Message *msg;
-
- msg=GetMsg(port);
- while(msg!=NULL)
- {
- ReplyMsg(msg);
- msg=GetMsg(port);
- }
- }
-
- UWORD LibVersionCheck(required)
- UWORD required;
- {
- UBYTE str[150];
-
- if(required>MBL_VERSION)
- {
- sprintf(&str,
- GetLStr(85,"Wrong version of musicbox.library!\nThis program requires version %d.%02d,\ninstalled version is %d.%02d."),
- required/100,required % 100,
- MBL_VERSION/100,MBL_VERSION % 100);
- MultiRequestA(GetLStr(84,"Music Box-Library - Error!"),
- &str,
- GetLStr(16,"Abort"));
- return(0);
- }
- return(MBL_VERSION);
- }
-
-